package com.ts.api.module.product.entity.bo;

import com.gitee.apanlh.util.base.BigDecimalUtils;
import com.gitee.apanlh.util.base.Eq;
import com.ts.api.common.constant.productbill.ProductBillEnum;
import lombok.Data;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 *  单次自动账单扣款业务实体
 *
 *  @author Pan
 */
@Data
public class ProductAmountBO {

    /** 机构id */
    private Long productId;
    /** 机构计划id */
    private Long productPlanId;
    /** 用户id */
    private Long userId;
    /** 渠道id */
    private Long loanChannelId;
    /** 客户端id */
    private String apiClientId;
    /** 手机号md5 */
    private String phoneMd5;
    /** 价格（第一优先） */
    private BigDecimal price;
    /** 机构原始价格（计算分润前的价格） */
    private BigDecimal originalPrice;
    /** 是否平台计划 */
    private Boolean hasPlatform;
    /** 是否本地库存在 */
    private Boolean hasLocalExist;
    /** 指定账单日期 */
    private String createTime;
    /** 修复账单时间 */
    private String updateTime;

    /**
     *  获得【扣款类型】
     *
     *  @return
     */
    public ProductBillEnum obtainDeductType() {
        //  唤醒计划
        boolean hasLocalExist = Eq.object(this.getHasLocalExist(), Boolean.TRUE);
        if (hasLocalExist) {
            return ProductBillEnum.WAKE;
        }

        //  计划类型
        boolean hasPlatform = Eq.object(this.getHasPlatform(), Boolean.TRUE);
        if (hasPlatform) {
            return ProductBillEnum.PLAT_PLAN;
        }
        return ProductBillEnum.PRODUCT_PLAN;
    }

    /**
     *  获得【价格】
     *
     *  @param share
     *  @param price
     *  @return
     */
    public BigDecimal obtainPrice(BigDecimal share, BigDecimal price) {
        if(this.price != null) {
            return this.price;
        }

        boolean hasPlatform = Eq.object(this.getHasPlatform(), Boolean.TRUE);
        //  平台计划
        if (hasPlatform) {
            //  分润模式赋值
            if (!Eq.str(share.toString(), "0.00")) {
                //  计算后的分润价
                BigDecimal percent = BigDecimalUtils.division(share, 100);
                return BigDecimalUtils.multiply(this.getOriginalPrice(), percent).setScale(2, RoundingMode.DOWN);
            }
            //  平台计划单价
            return price;
        }
        //  机构计划
        return price;
    }
}
